/*
 * (C) 2009, Elephant Seven Hamburg Gmbh, 
 * Author: Detlev Wiese
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
 * use this file except in compliance with the License. You may obtain a copy 
 * of the License at
 *  
 *     http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.se and its accompanying notice file is
 * included with the distribution. 
 */ 
package com.e7.streams;

/**
 * <P>An interface to define functions which can be used in conjunction 
 * with {@code MappedStream}-instances.</P>
 * <P>The function represented is required to return valid objects.  
 * A null might be acceptable depending on the surroundings, but throwing 
 * a {@code NoSuchElementException} would void the contract of the 
 * {@code MappingStream}-class.</P>
 * @see MappedStream
 * @param <F> The return type of the mapping
 * @param <E> The domain type of the mapping
 */
public interface MappingFunction<F, E> {
	
	/**
	 * Apply the function represented by the receiver and 
	 * return the result!
	 * @param object The object to be mapped.
	 * @return The value mapped to.
	 */
	public F value(E object); 
}